package com.itheima.xmy.Demo.Demo04;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/*需求：
2. 使用反射的方式创建一个实例、调用构造函数初始化name、age。
使用反射方式调用setName方法对姓名进行设置，不使用setAge方法直接使用反射方式对age赋值。
答案：*/
public class Demo04 {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchFieldException {

        Class<Person> aClass = Person.class;
        Constructor dc = aClass.getDeclaredConstructor(String.class, int.class);
        Person p1 = (Person) dc.newInstance("张三", 15);
        System.out.println(p1);
        Method setName = aClass.getDeclaredMethod("setName", String.class);
        setName.setAccessible(true);
        setName.invoke(p1, "李四");
        System.out.println(p1);
        Field age = aClass.getDeclaredField("age");
        age.setAccessible(true);
        age.set(p1,25);
        System.out.println(p1);

    }
}
